<?php 
/**
*file PageTool.class.php
*分页类
*@author houtizong
*@version 1.0
*
*@param $total int 总条数
*@param $pagenumber int  每页条数
*@param $page int 当前页 显示($page-1)*$pagenumber+1条--($page-1)*$pagenumber+$pagenumber条
*@param $pagecount int  总页数 ceil($total/$pagenumber)向上取整  
*/
defined('ACC') ||exit ('ACC Denied');

class PageTool{
	//默认值
	protected $total = 0;
	protected $pagenumber = 16;
	protected $page = 1;

	public function __construct($total,$page=false,$pagenumber=false){
		$this->total = $total;
		if ($pagenumber) {
			$this->pagenumber = $pagenumber;
		}
		if ($page) {
			$this->page = $page;
		}
	}
	//分页
	public function paging(){
		$pagecount = ceil($this->total/$this->pagenumber);//总页数
		$uri = $_SERVER['REQUEST_URI'];//获取地址栏/blog/admin/artlist.php?page=2 
        $parse = parse_url($uri); //以？分割成数组key为 path  query

        //把id=1&page=1 已关联数组方式存入数组
        $param = array();
        if (isset($parse['query'])) {
        	parse_str($parse['query'],$param);
        }

        //unset掉page单元 把除page单元外的数组保存起来
        unset($param['page']);
        //拼接path  /blog/admin/artlist.php
        $url = $parse['path'].'?';
        
        if (!empty($param)) {
        	$param = http_build_query($param);//把array(id=>1) 转成 id=1
        	$url = $url.$param.'&';  //拼接成 /blog/admin/artlist.php?id=1& 
        }

        /*算页码导航
                1                    当前页  当前页展示的标签  $this->page
                <a href="#">2</a>    其他页  循环显示即可
                <a href="#">3</a>
                <a href="#">4</a>
        */
        $nav = array();
        //把当前页展示的标签放入数组键中
        $nav[0] = $this->page;
        //左右两边循环  循环停止条件 左边大于1或右边小于总页数的值 且页码显示的页面数量
        for ($left=$this->page-1, $right=$this->page+1;
            ($left>=1||$right<=$pagecount)&&count($nav) <= 5;) {  
        	//print_r($left);
        	if ($left >= 1) {  //判断如果左边大于等于1就往前面插一条数据
        	   	array_unshift($nav , '<a href="'.$url . 'page=' . $left.'">['. $left .']</a>');
        	    $left -= 1;    //页码减一
        	   }   
        	if ($right <=$pagecount) { //如果右边小于等于1往后面插一条数据
        	 	array_push($nav , '<a href="'.$url . 'page=' . $right.'">['. $right .']</a>');
        	    $right += 1;    //页面加一
        	  } 	 
         }
         //print_r($nav);exit; 
         return implode('', $nav); //把数组值用空字符串分割 返回
	}

}





/* 分页类调用 测试 
   new PageTool(总条数,当前页,每页条数)
   show(); 返回show代码;

$page = isset($_GET['page'])?$_GET['page']:1;
$p = new PageTool(20,$page,2);
print_r($p);
print_r($page);
echo $p->paging();
 */

?>